Elastic Beanstalkで Stack ‘awseb-x-xxx-xxx’ does not exist とエラーが出た時の確認と対処方法
丹内です。
ElasticBeanstalk(EB)を使っていて発生した掲題のエラーについて、確認と対処の方法のまとめです。
エラーが発生する背景
このエラーは、EBが使っているCloudFormation(CFn) Stackが何らかの理由で無くなってしまった場合に発生します。
といっても、普通にEBを使っているだけならCFn Stackが勝手になくなることはありません。あるとすれば、人が誤って削除した、ということくらいです。
例えば、「久しぶりにマネジメントコンソールを見たら記憶に無い名前のCFn Stackがあり、だったら必要ないだろうと削除してしまったらEBにデプロイできなくなった」というシチュエーションが考えられます。というか僕はこれでした。
そもそもEBを使っているのにCFnのエラーが出るのはなぜか
EBは内部でCFnを使っているからです。このスライドの26ページにかかれているのですが、ローリングアップデートの際にそのような挙動になっているため、そのために必要なCFn Stackが無いとエラーになる、ということです。
トラブルシューティング1:原因の特定
eb deployでこのエラーメッセージが出た時は、まず該当のCFn Stackを誤って削除していないかを確認します。
ここでエラーメッセージに表示された名前と一致するStack名があれば、原因をStackの削除によるものと考えることができるので、次の段階に進みましょう。
トラブルシューティング2:原因の排除
このトラブルの場合、本来EB管理下にあるはずのCFn Stackを人の手で削除してしまったことが原因となっています。
したがってこれを復旧するためにはEB管理下にCFn Stackを戻せばよいのですが、一度削除したCFn Stackはrevertできないため、EB Environmentごと作りなおす方法でCFn Stackを復活させます。
方法は簡単で、マネジメントコンソールまたはCLIからRebuild Environmentを実行するだけです。
上の写真をクリックすると、確認画面が出てきます。そこでRebuildボタンを押すと、再構築が開始されます。
再構築後は各種インスタンスやSecurity Groupが別の新しいものに替わり、正常に動くようになります。
まとめ
EB使用時のCFn Stack削除に起因するエラーの診断方法と、対処方法としてのRebuild Environmentをご紹介しました。
実際にEBを使ってみると、AWSの柔軟なインフラを最大限利用しつつアプリケーション開発に集中できることがとても素晴らしいです。
独自仕様がわかりにくい部分もありますが、PaaSの選択肢の一つとして非常に魅力的なので、おすすめします。